package com.jcli.HslCommunication.HslCommunicationDemo;


import com.jcli.HslCommunication.BasicFramework.SoftBasic;
import com.jcli.HslCommunication.Core.Net.NetHandle;
import com.jcli.HslCommunication.Core.Types.OperateResultExOne;
import com.jcli.HslCommunication.Enthernet.SimplifyNet.NetSimplifyClient;
import com.jcli.HslCommunication.Profinet.Siemens.SiemensPLCS;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

/**
 * 这段Java代码创建了一个名为 `FormLoad` 的类，它继承自 `JDialog`，表示一个对话框窗口。这个对话框用于展示一个GUI界面，其中包含了一些按钮，每个按钮都可以启动不同的测试窗口。以下是代码的详细解释：
 * <p>
 * 1. **构造函数 `FormLoad`**：
 * - 在构造函数中，首先设置了对话框的标题、大小和位置，并将其设置为模态对话框（即用户必须处理此对话框才能继续操作）。
 * - 然后调用了 `AddMenuBar` 和一系列 `AddXxxGroup` 方法来添加菜单栏和各种测试按钮。
 * <p>
 * 2. **`AddMenuBar` 方法**：
 * - 这个方法用于创建和添加菜单栏到对话框。
 * - 创建了一个 `JMenuBar` 对象，设置了一些外观属性，并将其添加到对话框中。
 * - 在菜单栏中添加了多个菜单项，如 "About"、"简体中文"、"English"、"Changelog"、"Version" 和 "Disclaimer"。
 * <p>
 * 3. **`AddMelsecGroup`、`AddSiemensGroup`、`AddModbusGroup`、`AddOmronGroup`、`AddKeyenceGroup`、`AddHslGroup` 方法**：
 * - 这些方法用于添加不同设备类型的测试按钮组。
 * - 每个方法创建一个 `JPanel` 对象，设置了位置和边框，然后添加到主面板中。
 * - 在每个按钮组中，都有一系列按钮，每个按钮代表一种测试。例如，"MC 二进制" 按钮代表Melsec二进制测试，点击该按钮后会打开一个相应的测试窗口。
 * <p>
 * 4. 在每个按钮的 `MouseListener` 中，当用户点击按钮时，会隐藏当前的 `FormLoad` 对话框，创建并显示相应的测试窗口，然后再次显示 `FormLoad` 对话框。这样可以实现从主界面跳转到测试界面，测试完成后返回主界面。
 * <p>
 * 5. 最后，代码创建了一个新的线程，在线程中创建了一个 `NetSimplifyClient` 客户端对象，并向服务器发送了一条消息。这部分代码可能是为了与某个远程服务器进行通信的测试。
 * <p>
 * 总的来说，这段代码实现了一个简单的GUI界面，其中包含了多个按钮，每个按钮对应不同设备类型的测试窗口。用户可以点击按钮来打开相应的测试界面，执行设备通信测试。
 */
public class FormLoad extends JDialog {
    public FormLoad() {
        // 设置对话框窗口的标题、大小、位置和模态性
        this.setTitle("通讯测试工具"); // 设置窗口标题
        this.setSize(996, 723); // 设置窗口大小（宽996像素，高723像素）
        this.setLocationRelativeTo(null); // 设置窗口居中显示
        this.setModal(true); // 将窗口设置为模态对话框，防止同时进行其他操作

        // 添加菜单栏
        AddMenuBar(); // 调用方法以添加菜单栏

        // 创建一个面板，并使用空布局
        JPanel panel = new JPanel(); // 创建一个面板对象
        panel.setLayout(null); // 使用空布局，允许手动定位组件

        // 向面板中添加不同设备类型的测试按钮组
        AddMelsecGroup(panel); // 添加 Mitsubishi 三菱PLC 测试按钮组
        // AddSiemensGroup(panel); // 添加 Siemens 西门子PLC 测试按钮组
        // AddModbusGroup(panel); // 添加 Modbus 测试按钮组
        // AddOmronGroup(panel); // 添加 Omron 欧姆龙PLC 测试按钮组
        // AddKeyenceGroup(panel); // 添加 Keyence 基恩士PLC 测试按钮组
        // AddHslGroup(panel); // 添加 HslCommunication 自定义库测试按钮组

        // 将面板添加到对话框窗口中以显示在界面上
        this.add(panel);

        // 创建一个新线程用于进行网络通信测试
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                // 创建一个 NetSimplifyClient 客户端对象并连接到指定服务器
                NetSimplifyClient client = new NetSimplifyClient("118.24.36.220", 18467);
                // 向服务器发送消息并等待响应
                OperateResultExOne<String> read = client.ReadFromServer(new NetHandle(200), SoftBasic.FrameworkVersion.toString());
            }
        });

        // 启动新线程执行网络通信操作
        thread.start();
    }

    // 添加菜单栏
    private void AddMenuBar() {
        // 创建一个菜单栏对象
        JMenuBar menuBar = new JMenuBar();

        // 设置菜单栏的边距
        menuBar.setMargin(new Insets(8, 8, 8, 8));

        // 设置菜单栏的背景颜色
        menuBar.setBackground(new Color(32, 178, 170));

        // 创建一个名为 "About" 的菜单项
        JMenu menuAbout = new JMenu("About");

        // 将 "About" 菜单项添加到菜单栏
        menuBar.add(menuAbout);

        // 创建一个名为 "简体中文" 的菜单项
        JMenu menuChinese = new JMenu("简体中文");

        // 将 "简体中文" 菜单项添加到菜单栏
        menuBar.add(menuChinese);

        // 创建一个名为 "English" 的菜单项
        JMenu menuEnglish = new JMenu("English");

        // 将 "English" 菜单项添加到菜单栏
        menuBar.add(menuEnglish);

        // 创建一个名为 "Changelog" 的菜单项
        JMenu menuChangelog = new JMenu("Changelog");

        // 将 "Changelog" 菜单项添加到菜单栏
        menuBar.add(menuChangelog);

        // 创建一个显示软件版本信息的菜单项
        JMenu menuVersion = new JMenu("Version:" + SoftBasic.FrameworkVersion.toString());

        // 将版本信息菜单项添加到菜单栏
        menuBar.add(menuVersion);

        // 创建一个名为 "Disclaimer" 的菜单项
        JMenu menuDisclaimer = new JMenu("Disclaimer");

        // 将 "Disclaimer" 菜单项添加到菜单栏
        menuBar.add(menuDisclaimer);

        // 设置菜单栏可见
        menuBar.setVisible(true);

        // 将菜单栏设置为对话框的菜单栏
        this.setJMenuBar(menuBar);
    }

    //Mitsubishi 三菱PLC 测试按钮组
    private void AddMelsecGroup(JPanel panel) {
        // 创建一个面板用于容纳Melsec相关的按钮
        JPanel buttonPanel = new JPanel(null);

        // 设置面板的位置和大小
        buttonPanel.setBounds(9, 5, 183, 319);

        // 为面板添加边框并设置标题
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Melsec [三菱PLC]"));

        // 初始化按钮的垂直位置
        int location_y = 24;

        // 创建第一个按钮，用于打开MC二进制窗口
        JButton button1 = new JButton("MC 二进制"+"禁用");

        // 设置按钮的位置和大小
        button1.setBounds(15, location_y, 150, 32);

        // 禁用按钮的焦点绘制，使按钮没有选中状态
        button1.setFocusPainted(false);

        // 为按钮添加鼠标点击事件监听器
      /*  button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);

                // 当按钮被点击时，隐藏当前窗口
                setVisible(false);

                // 创建并显示Melsec二进制窗口
                FormMelsecBinary form = new FormMelsecBinary();
                form.setVisible(true);

                // 关闭Melsec二进制窗口时，重新显示当前窗口
                form.dispose();
                setVisible(true);
            }
        });*/

        // 将按钮添加到按钮面板
        buttonPanel.add(button1);

        // 更新垂直位置
        location_y += 40;

        // 创建第二个按钮，用于打开MC ASCII窗口
        JButton button2 = new JButton("MC ASCII"+"禁用");

        // 设置按钮的位置和大小
        button2.setBounds(15, location_y, 150, 32);

        // 禁用按钮的焦点绘制
        button2.setFocusPainted(false);

        // 为按钮添加鼠标点击事件监听器
       /* button2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);

                // 当按钮被点击时，隐藏当前窗口
                setVisible(false);

                // 创建并显示Melsec ASCII窗口
                FormMelsecAscii form = new FormMelsecAscii();
                form.setVisible(true);

                // 关闭Melsec ASCII窗口时，重新显示当前窗口
                form.dispose();
                setVisible(true);
            }
        });*/

        // 将按钮添加到按钮面板
        buttonPanel.add(button2);

        // 更新垂直位置
        location_y += 40;

        // 创建第三个按钮，用于打开A-1E二进制窗口
        JButton button3 = new JButton("A-1E 二进制");

        // 设置按钮的位置和大小
        button3.setBounds(15, location_y, 150, 32);

        // 禁用按钮的焦点绘制
        button3.setFocusPainted(false);

        // 为按钮添加鼠标点击事件监听器
        button3.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);

                // 当按钮被点击时，隐藏当前窗口
                setVisible(false);

                // 创建并显示A-1E二进制窗口
                FormMelsecA1E form = new FormMelsecA1E();
                form.setVisible(true);

                // 关闭A-1E二进制窗口时，重新显示当前窗口
                form.dispose();
                setVisible(true);
            }
        });

        // 将按钮添加到按钮面板
        buttonPanel.add(button3);

        // 将按钮面板添加到传入的面板中
        panel.add(buttonPanel);
    }


    private void AddSiemensGroup(JPanel panel) {
        JPanel buttonPanel = new JPanel(null);
        buttonPanel.setBounds(203, 5, 183, 319);
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Siemens [西门子PLC]"));
        int location_y = 24;

        JButton button1 = new JButton("S7 1200");
        button1.setBounds(15, location_y, 150, 32);
        button1.setFocusPainted(false);
       /* button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S1200);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button1);
        location_y += 40;

        JButton button2 = new JButton("S7 1500");
        button2.setBounds(15, location_y, 150, 32);
        button2.setFocusPainted(false);
        /*button2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S1500);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button2);
        location_y += 40;

        JButton button3 = new JButton("300");
        button3.setBounds(15, location_y, 150, 32);
        button3.setFocusPainted(false);
        /*button3.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S300);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button3);
        location_y += 40;

        JButton button4 = new JButton("400");
        button4.setBounds(15, location_y, 150, 32);
        button4.setFocusPainted(false);
       /* button4.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S400);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button4);
        location_y += 40;

        JButton button5 = new JButton("200 smart");
        button5.setBounds(15, location_y, 150, 32);
        button5.setFocusPainted(false);
       /* button5.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S200Smart);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button5);
        location_y += 40;

        JButton button7 = new JButton("200");
        button7.setBounds(15, location_y, 150, 32);
        button7.setFocusPainted(false);
      /*  button7.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensS7 form = new FormSiemensS7(SiemensPLCS.S200);
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button7);
        location_y += 40;

        JButton button6 = new JButton("Fetch/Write");
        button6.setBounds(15, location_y, 150, 32);
        button6.setFocusPainted(false);
       /* button6.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSiemensFW form = new FormSiemensFW();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button6);
        location_y += 40;

        panel.add(buttonPanel);
    }

    private void AddModbusGroup(JPanel panel) {
        JPanel buttonPanel = new JPanel(null);
        buttonPanel.setBounds(395, 5, 183, 319);
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Modbus"));
        int location_y = 24;

        JButton button1 = new JButton("Modbus Tcp");
        button1.setBounds(15, location_y, 150, 32);
        button1.setFocusPainted(false);
       /* button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormModbusTcp form = new FormModbusTcp();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button1);
        location_y += 40;

        panel.add(buttonPanel);
    }

    private void AddOmronGroup(JPanel panel) {
        JPanel buttonPanel = new JPanel(null);
        buttonPanel.setBounds(586, 5, 183, 319);
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Omron"));
        int location_y = 24;

        JButton button1 = new JButton("Fins-Tcp");
        button1.setBounds(15, location_y, 150, 32);
        button1.setFocusPainted(false);
        /*button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormOmronFins form = new FormOmronFins();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button1);
        location_y += 40;

        panel.add(buttonPanel);
    }

    private void AddKeyenceGroup(JPanel panel) {
        JPanel buttonPanel = new JPanel(null);
        buttonPanel.setBounds(777, 5, 183, 319);
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Keyence"));
        int location_y = 24;

        JButton button1 = new JButton("Mc 二进制");
        button1.setBounds(15, location_y, 150, 32);
        button1.setFocusPainted(false);
       /* button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormKeyenceBinary form = new FormKeyenceBinary();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button1);
        location_y += 40;

        JButton button2 = new JButton("Mc Ascii");
        button2.setBounds(15, location_y, 150, 32);
        button2.setFocusPainted(false);
       /* button2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormKeyenceAscii form = new FormKeyenceAscii();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button2);
        location_y += 40;

        panel.add(buttonPanel);
    }

    private void AddHslGroup(JPanel panel) {
        JPanel buttonPanel = new JPanel(null);
        buttonPanel.setBounds(9, 336, 183, 315);
        buttonPanel.setBorder(BorderFactory.createTitledBorder("Hsl"));
        int location_y = 24;

        JButton button1 = new JButton("NetSimplify");
        button1.setBounds(15, location_y, 150, 32);
        button1.setFocusPainted(false);
       /* button1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormSimplifyNet form = new FormSimplifyNet();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button1);
        location_y += 40;

        JButton button2 = new JButton("Net Push");
        button2.setBounds(15, location_y, 150, 32);
        button2.setFocusPainted(false);
      /*  button2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                setVisible(false);
                FormPushNet form = new FormPushNet();
                form.setVisible(true);
                form.dispose();
                setVisible(true);
            }
        });*/
        buttonPanel.add(button2);
        location_y += 40;

        panel.add(buttonPanel);
    }
}

